package com.kid.keep.service;

import com.kid.keep.dto.*;
import com.kid.keep.dto.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Description 小孩 service
 * @Author JOHN
 * @Create 2020-01-03
 * @Since 1.0.0
 */
public interface IChildService {

    /**
     * 新增小朋友
     *
     * @param addChildDTO
     * @return
     */
    ChildDTO addChild(AddChildDTO addChildDTO);

    /**
     * 修改小朋友
     *
     * @param updateChildDTO
     * @return
     */
    void updateChild(UpdateChildDTO updateChildDTO, Long parentId);
    /**
     * 查询小朋友
     *
     * @param childId
     * @param parentId
     * @return
     */
    ChildDTO getChildByIdAndParentId(Long childId,Long parentId);
    /**
     * 查询父母最新增加的小朋友
     *
     * @param parentId
     * @return
     */
    ChildDTO getNewestChildByParentId(Long parentId);

    /**
     * 删除小朋友
     *
     * @param childId
     * @param userId
     * @return
     */
    void deleteChild(Long childId, Long userId);

    /**
     * 查询小孩数量
     *
     * @param parentId
     * @return
     */
    List<ChildDTO> listChildByParentId(Long parentId);

    /**
     * 开启一次测评
     *
     * @param childId
     * @param userId
     * @return
     */
    @Transactional(rollbackForClassName = "Exception")
    CheckItemReportDTO openingCheckItemReport(Long childId, Long userId);

    /**
     * 开启一次测评
     *
     * @param childId
     * @param userId
     * @return
     */
    @Transactional(rollbackForClassName = "Exception")
    CheckItemReportDTO forcedOpeningCheckItemReport(Long childId, Long userId);

    /**
     * 按时间类型 统计测评报告类型
     *
     * @param type
     * @param creatorId
     * @param childId
     * @return
     */
    List<CheckItemReportDTO> countCheckReportByDateTypeAndChildId(Long childId,Integer type, Long creatorId);


}
